class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        vector<int>res;
        if(matrix.empty())
        {
            return res;
        }
        int l=0,r=matrix[0].size()-1;
        int t=0,b=matrix.size()-1;
        while(true)
        {
            //从右向左
            for(int i=l;i<=r;++i)
            {
                res.push_back(matrix[t][i]);
            }
            if(++t>b)
                break;
            //从上到下
            for(int i=t;i<=b;++i)
            {
                res.push_back(matrix[i][r]);
            }
            if(--r<l)
                break;
            //从右到左
            for(int i=r;i>=l;--i)
            {
                res.push_back(matrix[b][i]);
            }
            if(--b<t)
                break;
            //从下到上
            for(int i=b;i>=t;--i)
            {
                res.push_back(matrix[i][l]);
            }
            if(++l>r)
                break;
        }
        return res;
    }
};